const { sequelize } = require('../utils/database');
const { User } = require('../models');
const bcrypt = require('bcryptjs');

async function initAdminUser() {
  try {
    console.log('开始创建/更新管理员用户...');
    
    // 测试数据库连接
    await sequelize.authenticate();
    console.log('数据库连接成功');
    
    // 检查admin用户是否存在
    let admin = await User.findOne({ where: { username: 'admin' } });
    
    if (admin) {
      console.log('管理员用户已存在，开始更新角色...');
      
      // 更新角色为admin（如果不是）
      if (admin.role !== 'admin') {
        await admin.update({ 
          role: 'admin',
          permissions: {
            'user.view': true,
            'user.edit': true,
            'user.delete': true,
            'user.status': true,
            'content.review': true,
            'content.edit': true,
            'content.delete': true,
            'badge.view': true,
            'badge.create': true,
            'badge.mint': true,
            'system.stats': true
          }
        });
        console.log('管理员用户角色已更新为: admin');
      } else {
        console.log('管理员用户已经拥有正确的角色');
      }
    } else {
      console.log('管理员用户不存在，开始创建...');
      
      // 创建新的admin用户
      const password = 'admin123'; // 默认密码
      const password_hash = await bcrypt.hash(password, 12);
      
      admin = await User.create({
        username: 'admin',
        email: 'admin@campus.com',
        password_hash,
        bio: '系统管理员',
        role: 'admin',
        permissions: {
          'user.view': true,
          'user.edit': true,
          'user.delete': true,
          'user.status': true,
          'content.review': true,
          'content.edit': true,
          'content.delete': true,
          'badge.view': true,
          'badge.create': true,
          'badge.mint': true,
          'system.stats': true
        },
        is_active: true
      });
      
      console.log('管理员用户创建成功!');
      console.log('用户名: admin');
      console.log('密码: admin123');
    }
    
    // 创建超级管理员用户(如果不存在)
    let superAdmin = await User.findOne({ where: { username: 'superadmin' } });
    
    if (!superAdmin) {
      console.log('超级管理员用户不存在，开始创建...');
      
      // 创建新的superadmin用户
      const password = 'superadmin123'; // 默认密码
      const password_hash = await bcrypt.hash(password, 12);
      
      superAdmin = await User.create({
        username: 'superadmin',
        email: 'superadmin@campus.com',
        password_hash,
        bio: '系统超级管理员',
        role: 'superadmin',
        is_active: true
      });
      
      console.log('超级管理员用户创建成功!');
      console.log('用户名: superadmin');
      console.log('密码: superadmin123');
    } else {
      console.log('超级管理员用户已存在');
      
      // 确保角色是superadmin
      if (superAdmin.role !== 'superadmin') {
        await superAdmin.update({ role: 'superadmin' });
        console.log('超级管理员用户角色已更新为: superadmin');
      }
    }
    
    // 创建版主用户(如果不存在)
    let moderator = await User.findOne({ where: { username: 'moderator' } });
    
    if (!moderator) {
      console.log('版主用户不存在，开始创建...');
      
      // 创建新的moderator用户
      const password = 'moderator123'; // 默认密码
      const password_hash = await bcrypt.hash(password, 12);
      
      moderator = await User.create({
        username: 'moderator',
        email: 'moderator@campus.com',
        password_hash,
        bio: '内容审核员',
        role: 'moderator',
        permissions: {
          'content.review': true,
          'content.edit': true,
          'content.delete': true
        },
        is_active: true
      });
      
      console.log('版主用户创建成功!');
      console.log('用户名: moderator');
      console.log('密码: moderator123');
    } else {
      console.log('版主用户已存在');
      
      // 确保角色是moderator
      if (moderator.role !== 'moderator') {
        await moderator.update({ 
          role: 'moderator',
          permissions: {
            'content.review': true,
            'content.edit': true,
            'content.delete': true
          }
        });
        console.log('版主用户角色已更新为: moderator');
      }
    }
    
    console.log('管理员用户初始化完成!');
    
  } catch (error) {
    console.error('管理员用户初始化失败:', error);
  } finally {
    // 关闭数据库连接
    await sequelize.close();
  }
}

// 如果直接运行此脚本，则执行初始化
if (require.main === module) {
  initAdminUser();
}

module.exports = initAdminUser; 